#ifndef FS_FILE_H
#define FS_FILE_H
#include "stdint.h"
#include "ide.h"
#include "dir.h"
#include "fs.h"
/* 文件表项, 描述文件 */
struct file {
    uint32_t file_pos;  // 当前文件操作的偏移
    uint32_t file_flags;  // 文件标志, 描述该文件的属性, 如只读, 读写, 非阻塞等
    struct inode* file_inode;    // 文件实体inode
};

enum std_fd {
    stdin_no,
    stdout_no,
    stderr_no
};

enum bitmap_type {
    INODE_BITMAP,
    BLOCK_BITMAP
};

#define MAX_FILE_OPEN 32 // 该系统一共可以打开32个文件

// 文件表, 系统所有打开文件都记录在该表中
extern struct file file_table[MAX_FILE_OPEN];

/* 函数声明 */
int32_t get_free_slot_in_global();
int32_t pcb_fd_install(int32_t global_fd_idx);
int32_t block_bitmap_alloc(struct partition* part);
int32_t inode_bitmap_alloc(struct partition* part);
void bitmap_sync(struct partition* part, uint32_t bit_idx, enum bitmap_type btmp);
int32_t file_create(struct dir* parent_dir, char* filename, uint32_t flag);
int32_t file_open(uint32_t inode_no, enum oflags flag);
int32_t file_close(struct file* file);
int32_t file_write(struct file *file, const void *buf, uint32_t count);
int32_t file_read(struct file *file, void *buf, uint32_t count);
#endif // FS_FILE_H
